/**
 * Copyright © 2016-2025 The Thingsboard Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.terracloud.server.service.log;

import com.terracloud.server.common.data.log.PlatformLog;
import com.terracloud.server.common.data.log.PlatformStatistics;
import com.terracloud.server.common.data.id.TenantId;
import com.terracloud.server.common.data.id.UserId;
import com.terracloud.server.common.data.id.PlatformLogId;
import com.terracloud.server.common.data.log.LogLevel;
import com.terracloud.server.common.data.log.LogType;
import com.terracloud.server.common.data.page.TimePageLink;

/**
 * 平台日志服务接口
 */
public interface PlatformLogService {

    /**
     * 保存平台日志
     *
     * @param platformLog 平台日志实体
     * @return 保存后的平台日志实体
     */
    PlatformLog savePlatformLog(PlatformLog platformLog);

    /**
     * 根据ID查找平台日志
     *
     * @param platformLogId 平台日志ID
     * @return 平台日志实体
     */
    PlatformLog findPlatformLogById(PlatformLogId platformLogId);

    /**
     * 删除平台日志
     *
     * @param platformLogId 平台日志ID
     */
    void deletePlatformLog(PlatformLogId platformLogId);

    /**
     * 根据租户ID查找平台日志列表
     *
     * @param tenantId 租户ID
     * @param pageLink 分页参数
     * @return 平台日志分页数据
     */
    com.terracloud.server.common.data.page.PageData<PlatformLog> findPlatformLogsByTenantId(TenantId tenantId, TimePageLink pageLink);

    /**
     * 根据租户ID和用户ID查找平台日志列表
     *
     * @param tenantId 租户ID
     * @param userId 用户ID
     * @param pageLink 分页参数
     * @return 平台日志分页数据
     */
    com.terracloud.server.common.data.page.PageData<PlatformLog> findPlatformLogsByTenantIdAndUserId(TenantId tenantId, UserId userId, TimePageLink pageLink);

    /**
     * 根据租户ID和日志类型查找平台日志列表
     *
     * @param tenantId 租户ID
     * @param logType 日志类型
     * @param pageLink 分页参数
     * @return 平台日志分页数据
     */
    com.terracloud.server.common.data.page.PageData<PlatformLog> findPlatformLogsByTenantIdAndType(TenantId tenantId, LogType logType, TimePageLink pageLink);

    /**
     * 根据租户ID和日志级别查找平台日志列表
     *
     * @param tenantId 租户ID
     * @param logLevel 日志级别
     * @param pageLink 分页参数
     * @return 平台日志分页数据
     */
    com.terracloud.server.common.data.page.PageData<PlatformLog> findPlatformLogsByTenantIdAndLevel(TenantId tenantId, LogLevel logLevel, TimePageLink pageLink);

    /**
     * 获取今日业务操作数量
     *
     * @param tenantId 租户ID
     * @return 今日业务操作数量
     */
    long getTodayBusinessOperationCount(TenantId tenantId);

    /**
     * 获取敏感操作记录数
     *
     * @param tenantId 租户ID
     * @return 敏感操作记录数
     */
    long getSensitiveOperationCount(TenantId tenantId);

    /**
     * 获取权限变更操作占比
     *
     * @param tenantId 租户ID
     * @return 权限变更操作占比
     */
    double getPermissionChangeRatio(TenantId tenantId);

    /**
     * 获取未处理异常数
     *
     * @param tenantId 租户ID
     * @return 未处理异常数
     */
    long getUnprocessedExceptionCount(TenantId tenantId);

    /**
     * 获取严重级别异常数
     *
     * @param tenantId 租户ID
     * @return 严重级别异常数
     */
    long getCriticalExceptionCount(TenantId tenantId);

    /**
     * 获取活跃用户操作数量
     *
     * @param tenantId 租户ID
     * @return 活跃用户操作数量
     */
    long getActiveUserOperationCount(TenantId tenantId);

    /**
     * 获取平台日志综合统计信息
     *
     * @param tenantId 租户ID
     * @return 平台日志统计信息
     */
    PlatformStatistics getPlatformStatistics(TenantId tenantId);

}